package top.lishuoboy.spring.aop.spring_aspects;

import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.springframework.stereotype.Component;

// 2.增强的类
@Slf4j
@Component
public class Student20Proxy {
    public void around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
        log.warn("前置环绕通知");
        // 被增强的方法执行
        proceedingJoinPoint.proceed();
        log.warn("后置环绕通知");  // 有异常时不执行
    }

    public void before() {
        log.warn("前置通知");
    }

    /** 返回通知，无异常时执行，与“异常通知”互斥。 */
    public void afterReturning() {
        log.warn("返回通知");
    }

    /** 异常通知，有异常时执行，与“返回通知”互斥。 */
    public void afterThrowing() {
        log.warn("异常通知");
    }

    public void after() {
        log.warn("后置通知");  // 后置通知（最终通知），有没有异常都会执行，类似 finally
    }
}